package yxxy.c_007;

/**
 * 同步和非同步方法是否可以同时调用
 * 可以
 */
class T {
    /**
     * 问题：
     * 执行m1时，需要锁定当前对象，
     * 执行m2时，不需要锁定当前对象，
     * 请问，在m1执行时，可以执行m2吗？
     * <p>
     * 答案： m2可以执行，
     */
    public synchronized void m1() {
        System.out.println(Thread.currentThread().getName() + "m1 start...");
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " m1 end");
    }

    public void m2() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " m2");
    }

    public static void main(String[] args) {
        T t = new T();
//        new Thread(() -> t.m1(), "t1").start();
//        new Thread(() -> t.m2(), "t2").start();

        new Thread(t::m1, "t1").start();
        new Thread(t::m2, "t2").start();
    }
}
